package com.imut.lagain.service;
import org.slf4j.LoggerFactory;

import com.imut.lagain.entity.MoodStealRecord;
import com.imut.lagain.entity.MemoryEntry;
import com.imut.lagain.entity.MoodThief;

import java.util.List;
import java.util.Map;

/**
 * 心情小偷游戏服务接口
 */
public interface IMoodThiefGameService {
    
    /**
     * 执行偷取操作
     * @param thiefUserId 偷取者ID
     * @param victimUserId 被偷者ID
     * @param thiefId 小偷ID
     * @return 偷取结果
     */
    Map<String, Object> performSteal(Long thiefUserId, Long victimUserId, Long thiefId);
    
    /**
     * 尝试追回被偷的心情
     * @param stealRecordId 偷取记录ID
     * @param victimUserId 被偷者ID
     * @return 追回结果
     */
    Map<String, Object> attemptRecovery(Long stealRecordId, Long victimUserId);
    
    /**
     * 获取可偷取的记忆条目
     * @param victimUserId 被偷者ID
     * @param thiefUserId 偷取者ID
     * @return 可偷取的条目列表
     */
    List<MemoryEntry> getStealableEntries(Long victimUserId, Long thiefUserId);
    
    /**
     * 获取随机心情小偷
     * @return 随机心情小偷
     */
    MoodThief getRandomThief();
    
    /**
     * 获取幽默文案
     * @param moodType 心情类型
     * @param thiefType 小偷类型
     * @return 幽默文案
     */
    String getHumorMessage(String moodType, String thiefType);
    
    /**
     * 检查用户是否可以进行偷取操作
     * @param thiefUserId 偷取者ID
     * @param victimUserId 被偷者ID
     * @return 是否可以偷取
     */
    boolean canSteal(Long thiefUserId, Long victimUserId);
    
    /**
     * 获取用户的偷取记录
     * @param userId 用户ID
     * @param isThief 是否作为偷取者（true-偷取者，false-被偷者）
     * @return 偷取记录列表
     */
    List<MoodStealRecord> getUserStealRecords(Long userId, boolean isThief);
    
    /**
     * 计算偷取成功率
     * @param thief 心情小偷
     * @param thiefUserId 偷取者ID
     * @param victimUserId 被偷者ID
     * @return 成功率
     */
    float calculateStealSuccessRate(MoodThief thief, Long thiefUserId, Long victimUserId);
    
    /**
     * 计算追回成功率
     * @param stealRecord 偷取记录
     * @return 追回成功率
     */
    float calculateRecoverySuccessRate(MoodStealRecord stealRecord);
    
    /**
     * 获取偷取统计信息
     * @param userId 用户ID
     * @return 统计信息
     */
    Map<String, Object> getStealStatistics(Long userId);
}
